Option Explicit

'################################################################
' Descriptor
' 保存对象类型的队列
'################################################################

'################################################################
' Field
'################################################################
' List<Variant>
Private cache As Collection

'#######################################
' Constructor
'#######################################
Private Sub Class_Initialize()
    Set cache = New Collection
End Sub

Private Sub Class_Terminate()
    Set cache = Nothing
End Sub

'################################################################
' Property
'################################################################
' 返回当前队列中元素的数量
Public Property Get Count() As Integer
    Count = cache.Count
End Property

' 检查当前队列是否为空
Public Property Get IsEmpty() As Boolean
    IsEmpty = cache.Count = 0
End Property

'################################################################
' Function
'################################################################
' 向队尾添加一个元素
' @param e 任意对象类型的对象
Public Sub offer(ByRef e As Variant)
    cache.Add e
End Sub

' 从队头弹出一个元素
' 如果队列没有元素了，则返回 Empty
Public Function poll() As Variant
    If cache.Count = 0 Then
        poll = Empty
    Else
        poll = cache.Item(1)
        cache.Remove 1
    End If
End Function

' 返回队头的元素
' 如果队列没有元素了，则返回 Empty
Public Function peek() As Variant
    If cache.Count = 0 Then
        peek = Empty
    Else
        peek = cache.Item(1)
    End If
End Function

' 清空队列
Public Sub clear()
    UtilsCollection.removeAllCollection cache
End Sub